package com.shangcheng.server.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shangcheng.model.domain.PmsProductAttribute;
import com.shangcheng.model.domain.PmsProductAttributeCategory;
import com.shangcheng.model.vo.PageResult;
import com.shangcheng.model.vo.PmsProductAttributeCategoryVo;
import com.shangcheng.server.exception.BusinessException;
import com.shangcheng.server.mapper.PmsProductAttributeCategoryMapper;
import com.shangcheng.server.service.PmsProductAttributeCategoryService;
import com.shangcheng.server.service.PmsProductAttributeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Service
public class PmsProductAttributeCategoryServiceImpl extends ServiceImpl<PmsProductAttributeCategoryMapper, PmsProductAttributeCategory> implements PmsProductAttributeCategoryService {
    @Autowired
    private PmsProductAttributeService pmsProductAttributeService;

    @Override
    public void create(String name) {
        PmsProductAttributeCategory pmsProductAttributeCategory = new PmsProductAttributeCategory();
        pmsProductAttributeCategory.setName(name);
        PmsProductAttributeCategory one = getOne(new LambdaUpdateWrapper<PmsProductAttributeCategory>().eq(PmsProductAttributeCategory::getName, name));
        if (!ObjectUtils.isEmpty(one)) {
            throw new BusinessException("该名称已存在");
        }
        save(pmsProductAttributeCategory);
    }

    @Override
    public PageResult getList(Integer pageNum, Integer pageSize) {

        Page<PmsProductAttributeCategory> page = new Page<>(pageNum, pageSize);
        page(page);
        return new PageResult(pageNum, pageSize, (int) page.getTotal(), page.getRecords());
    }

    @Override
    public List<PmsProductAttributeCategoryVo> listWithAttr() {
        List<PmsProductAttributeCategory> list = list();
        List<Long> ids = new ArrayList<>();
        for (PmsProductAttributeCategory pmsProductAttributeCategory : list) {
            ids.add(pmsProductAttributeCategory.getId());
        }
        List<PmsProductAttributeCategoryVo> allList = new ArrayList<>();
        //List<PmsProductAttribute> pmsProductAttributes = pmsProductAttributeService.listByIds(ids);
        List<PmsProductAttribute> pmsProductAttributes = pmsProductAttributeService.list(new LambdaQueryWrapper<PmsProductAttribute>().in(ObjectUtil.isNotEmpty(ids), PmsProductAttribute::getProductAttributeCategoryId, ids));
        for (PmsProductAttributeCategory pmsProductAttributeCategory : list) {
            //遍历每一条目录
            PmsProductAttributeCategoryVo pmsProductAttributeCategoryVo = new PmsProductAttributeCategoryVo();
            ArrayList<PmsProductAttribute> productAttributeArrayList = new ArrayList<>();
            BeanUtils.copyProperties(pmsProductAttributeCategory, pmsProductAttributeCategoryVo);
            for (PmsProductAttribute pmsProductAttribute : pmsProductAttributes) {
                if (pmsProductAttribute.getProductAttributeCategoryId().equals(pmsProductAttributeCategory.getId())) {
                    productAttributeArrayList.add(pmsProductAttribute);
                }
            }
            //判断属性列表是否为空
            if (!ObjectUtils.isEmpty(productAttributeArrayList)) {
                pmsProductAttributeCategoryVo.setProductAttributeList(productAttributeArrayList);
            }
            allList.add(pmsProductAttributeCategoryVo);
        }
        return allList;
    }

    @Override
    public void updateProductAttributeCategoryById(Integer id, String name) {
        LambdaUpdateWrapper<PmsProductAttributeCategory> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(PmsProductAttributeCategory::getId, id);
        wrapper.set(PmsProductAttributeCategory::getName, name);
        PmsProductAttributeCategory byId = getById(id);
        PmsProductAttributeCategory one = getOne(new LambdaUpdateWrapper<PmsProductAttributeCategory>().eq(PmsProductAttributeCategory::getName, name));
        if (!ObjectUtils.isEmpty(one) && !one.getId().equals(byId.getId())) {
            throw new BusinessException("该名称已存在");
        }
        update(wrapper);
    }

    @Override
    public PmsProductAttributeCategory getCategoryById(Long id) {
        PmsProductAttributeCategory byId = getById(id);
        return byId;
    }
}
